【概念篇】epoch和step
参考:https://www.jiqizhixin.com/articles/2017-09-25-3
在一个工厂中有1000w的任务量,存在5条生产线,每条生产线不相关的去处理这100w的任务,而在单位时间内,每条生产线只能处理100个任务,每次处理任务即会出现一次结果,而一次epoch就是一次输出最终结果所需要经历的所有操作。
则整个流程中:
- 每个生产线实质就是分布式的一个worker
- 每个生产线单位时间内处理的任务量实质就是batch_size
- 每输出一次结果的过程就是一个step
- 每处理完一次数据则是一个epoch,一次epoch处理完的任务量为step * batch_size
需要注意的是:
- 但是这些处理掉的任务量并非是总任务量的 1/10。因为不同worker间处理的样本抽样是相互独立的
- 而一个worker内的不同step的任务可以是有放回抽样,也可以是无放回抽样,由相关配置决定
- 最好一个epoch内处理的任务量是可以遍历全部的任务的(即step * batch_size = 1000w),但是事实上由于OOB(袋外数据)可知始终有一部分(36.8%)不会被选中
这样做的好处是:
- 如果worker非独立,即不同worker处理的任务是相异的,则由于每个任务的差异性和worker的执行速度不同,会导致数据倾斜带来的执行缓慢
- worker内每个step的样本抽样最好是无放回抽样,可保证使用尽可能多的样本信息